
import csv
from pathlib import Path


def read_csv_data(file_path, eval_indices=()):
    """
    通用读取 CSV 文件，返回列表嵌套元组的格式

    参数:
        file_path (str): CSV 文件相对项目根目录 data 文件夹的路径
        eval_indices (tuple): 需要用 eval 转换的字段索引（如 (3,) 表示第4列）

    返回:
        list[tuple]: 每行数据为元组，指定索引位置的元素已用 eval 转换
    """
    project_root = Path(__file__).parent.parent
    full_path = project_root / 'data' / file_path

    with open(full_path, 'r', encoding='utf-8') as file:
        reader = csv.reader(file)
        header = next(reader)  # 获取表头（第一行）
        data = []

        for row in reader:
            processed_row = []
            for i, value in enumerate(row):
                # 对指定索引位置的元素使用 eval 转换
                if i in eval_indices:
                    processed_row.append(eval(value))  # 注意：eval 有风险，建议用 json.loads
                else:
                    processed_row.append(value)
            data.append(tuple(processed_row))

        return data


# if __name__ == "__main__":
#     # 示例：读取 login.csv，假设第4列(expected)需要 eval 转换
#     data = read_csv_data('login.csv', eval_indices=(2,3,))
#     print(data)
#     # 输出示例: [('123456', 'abc', 'user1', [1, 2, 3], 'case001', '测试登录'), ...]


